<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en-US">
<head>
    <meta charset="utf-8">


    <link href="/assets/css/all.css" rel="stylesheet" type="text/css">
    <script async src="/assets/js/all.js"></script>


    <script type="text/x-mathjax-config">
      MathJax.Hub.Config({tex2jax: {inlineMath: [['«', '»']]}});
      MathJax.Hub.config.tex2jax.skipTags = ["script", "noscript", "style", "textarea", "annotation", "annotation-xml"];

    </script>
    <script async src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-AMS_HTML'></script>
    <!-- Google Analytics -->
    <script>
        window.ga = window.ga || function () {
            (ga.q = ga.q || []).push(arguments)
        };
        ga.l = +new Date;
        ga('create', 'UA-58002512-1', 'auto');
        ga('set', 'anonymizeIp', true);
        ga('send', 'pageview');
    </script>
    <script async src='https://www.google-analytics.com/analytics.js'></script>
    <!-- End Google Analytics -->

    <title>Nim by Example - Blocks</title>

    <meta content="nanoc 4.9.9" name="generator">
    <meta content="colorful" http-equiv="Default-Style">
    <meta content="width=device-width, initial-scale=1" name=viewport>
</head>
<body>

<div id="sidebar">
    <div class="abs-hamburger">
        <div class="nav-toggle" onclick="sidebarClick();"><span></span></div>
    </div>
    <nav>
        <ul>
            <li><a href="/getting_started/">Getting Started</a></li>
            <li><a href="/hello_world/">Hello World</a></li>
            <li><a href="/comments/">Comments</a></li>
            <li><a href="/variables/">Variables</a>
                <ul>
                    <li><a href="/variables/result/">Result</a></li>
                    <li><a href="/variables/type_casting_inference/">Type Casting and Inference</a></li>
                </ul>
            </li>
            <li><a href="/if_else_while/">If, Else, While</a></li>
            <li><a href="/case/">Case Statements</a></li>
            <li><a href="/for_iterators/">For Loops &amp; Iterators</a></li>
            <li><a href="/procs/">Procs</a></li>
            <li><a href="/procvars/">First Class Functions</a></li>
            <li><a href="/block/">Blocks</a></li>
            <li><a href="/primitives/">Primitive Types</a></li>
            <li><a href="/types/">Type Aliases</a></li>
            <li><a href="/types/objects/">Object Types</a></li>
            <li><a href="/types/enums/">Enum Types</a></li>
            <li><a href="/types/distinct/">Distinct Types</a></li>
            <li><a href="/strings/">Strings</a></li>
            <li><a href="/arrays/">Arrays</a></li>
            <li><a href="/seqs/">Seqs</a></li>
            <li><a href="/bitsets/">Bitsets</a></li>
            <li><a href="/files/">Files</a></li>
            <li><a href="/json/">JSON</a></li>
            <li><a href="/varargs/">Varargs</a></li>
            <li><a href="/oop/">Object Oriented Programming</a></li>
            <li><a href="/macros/">Macros</a></li>
        </ul>


    </nav>
</div>

<article>
    <h1 id="blocks">Blocks</h1>

    <p>Blocks can be introduced in two different ways: by indenting statements or with <code>()</code>s.</p>

    <p>The first way is to use indenting, e.g. using <code>if-elif-else</code>, <code>while</code>, <code>for</code>
        statements, or the <code>block</code> statement.</p>

    <pre><code class="language-nimrod"><span class="k">if</span> <span class="kp">true</span><span class="p">:</span>
  <span class="n">echo</span> <span class="s">"Nim is great!"</span>

<span class="k">while</span> <span class="kp">false</span><span class="p">:</span>
  <span class="n">echo</span> <span class="s">"This line is never output!"</span>

<span class="k">block</span><span class="p">:</span>
  <span class="n">echo</span> <span class="s">"This line, on the other hand, is always output"</span></code></pre>

    <p>The <code>block</code> statement can also be labeled, making it useful for breaking out of loops and is useful
        for general scoping as well.</p>

    <pre><code class="language-nimrod"><span class="k">block</span> <span class="n">outer</span><span class="p">:</span>
  <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="mf">0</span><span
                class="p">..</span><span class="mi">2000</span><span class="p">:</span>
    <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="mf">0</span><span
                class="p">..</span><span class="mi">2000</span><span class="p">:</span>
      <span class="k">if</span> <span class="n">i</span><span class="o">+</span><span class="n">j</span> <span
                class="o">==</span> <span class="mi">3145</span><span class="p">:</span>
        <span class="n">echo</span> <span class="n">i</span><span class="p">,</span> <span class="s">", "</span><span
                class="p">,</span> <span class="n">j</span>
        <span class="k">break</span> <span class="n">outer</span>

<span class="k">let</span> <span class="n">b</span> <span class="o">=</span> <span class="mi">3</span>
<span class="k">block</span><span class="p">:</span>
  <span class="k">let</span> <span class="n">b</span> <span class="o">=</span> <span class="s">"3"</span>  <span
                class="c"># shadowing is probably a dumb idea</span></code></pre>

    <p>Parentheses can be used as an expression, but they do not provide end of statement inference, so it is necessary
        to place semicolons yourself. An interesting and unexpected side effect of this syntax is that Nim is suitable
        even for die-hard brace purists!</p>

    <p>While possible, it doesn’t mean it’s a good idea. Most Nim code does not use parentheses in that way, and it
        would not be seen as idiomatic.</p>

    <pre><code class="language-nimrod"><span class="k">proc </span><span class="nf">square</span><span
            class="p">(</span><span class="n">inSeq</span><span class="p">:</span> <span class="kt">seq</span><span
            class="o">[</span><span class="kt">float</span><span class="o">]</span><span class="p">):</span> <span
            class="kt">seq</span><span class="o">[</span><span class="kt">float</span><span class="o">]</span> <span
            class="o">=</span> <span class="p">(</span>
  <span class="n">result</span> <span class="o">=</span> <span class="n">newSeq</span><span class="o">[</span><span
                class="kt">float</span><span class="o">]</span><span class="p">(</span><span class="n">len</span><span
                class="p">(</span><span class="n">inSeq</span><span class="p">));</span>
  <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span
                class="n">inSeq</span><span class="p">:</span> <span class="p">(</span>
    <span class="n">result</span><span class="o">[</span><span class="n">i</span><span class="o">]</span> <span
                class="o">=</span> <span class="n">v</span><span class="o">*</span><span class="n">v</span><span
                class="p">;</span>
  <span class="p">)</span>
<span class="p">)</span></code></pre>

    <!-- XXX FIX
    square((  # A 1001 long sequence to be squared
      var result = newSeq[float]();
      for i in 0..1000:
        result.add(i);
      result
    ))-->

</article>

<div id=nextprev>
    <a class="text-icon disabled" href="https://please-enable-js/" id=arrow-prev>↽</a>
    <a class="text-icon disabled" href="https://please-enable-js/" id=arrow-next>⇁</a>
</div>

<footer>
    <li><a href="https://github.com/flaviut/nim-by-example">Contribute</a></li>
    <li
    ><a href="#" onclick="toggleDarkMode(); return false;">Toggle dark mode</a></li>

</footer>
</body>
</html>
